<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>组件通信</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="app">
    <child v-on:yy="callback"></child>
  </div>
</body>
</html>
<script>
  // 组件通信
  // 1. 父向子传值
  // 1.1 父亲 通过属性给子组件传值
  // 1.2 儿子：通过props接受值
  // 2. 子向父传值 可以理解为 父给子传递一个函数或发布订阅
  // 2.1 父亲 通过v-on传递  v-on:yy="callback"
  // 2.2 儿子：通过$emit('yy', 6666)调用父亲给我传递的函数并传递参数
  // 也可以通过发布订阅方式理解：
  // 父亲订阅公众号v-on:yy="callback" 父亲订阅和儿子发布一定要是同一个公众号
  // 儿子通过公众号发布消息$emit('yy', 6666) yy就好比公众号
  // 定义组件
  // Vue.component(组件名字, 组件)
  /* var Child = Vue.extend({
    template: `<div>这是儿子</div>`
  })
  Vue.component('child', Child) */
  Vue.component('child', {
    data() {
      return {
        jx: 10
      }
    },
    template: `<div>
      这是儿子
      <button @click="$emit('yy', 6666)">给父亲传值1</button>
      <button @click="btnClick">给父亲传值2</button>
    </div>`,
    methods: {
      btnClick() {
        // 调用父亲传递给我的函数
        this.$emit('yy', this.jx)
      }
    }
  })
  var vm = new Vue({
    el: '#app',
    methods: {
      callback (v) {
        console.log(v)
      }
    }
  })
</script>